package com.codecrane.core.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;

/**
 * @author 陈鸿飞 on 2019/3/19.
 */
public class ExcelUtil {
    /**
     * 导出Excel
     *
     * @param sheetName sheet名称
     * @param title     标题
     * @param values    内容
     * @param wb        HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {

        // 第一步，创建一个HSSFWorkbook，对应一个Excel文件
        if (wb == null) {
            wb = new HSSFWorkbook();
        }

        // 第二步，在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);

        // 第四步，创建单元格，并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
//        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        style.setDataFormat((short) 0);
        sheet.setDefaultColumnStyle(11, style);
//        CellStyle textStyle = wb.createCellStyle();
//
//        sheet.setDefaultColumnStyle(5, textStyle);
//        sheetcell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
//        HSSFCellStyle cellStyle = workbook.createCellStyle();
//        HSSFDataFormat format = workbook.createDataFormat();
//        cellStyle.setDataFormat(format.getFormat("0.00"));//设置单元类型
//        sheetcell.setCellStyle(cellStyle);

        //声明列对象
        HSSFCell cell = null;

        //创建标题
        for (int i = 0; i < title.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);

        }
        HSSFCellStyle contextstyle = wb.createCellStyle();
        //创建内容
        for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 1);
            for (int j = 0; j < values[i].length; j++) {
                //将内容按顺序赋给对应的列对象
                // row.createCell(j).setCellValue(values[i][j]);
                HSSFCell contentCell = row.createCell(j);
                Object data = values[i][j];
                Boolean isNum = false;//data是否为数值型
                Boolean isInteger = false;//data是否为整数
                Boolean isPercent = false;//data是否为百分数
                if (data != null || "".equals(data)) {
                    //判断data是否为数值型
                    isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
                    //判断data是否为整数（小数部分是否为0）
                    isInteger = data.toString().matches("^[-\\+]?[\\d]*$");
                    //判断data是否为百分数（是否包含“%”）
                    isPercent = data.toString().contains("%");
                }

                //如果单元格内容是数值类型，涉及到金钱（金额、本、利），则设置cell的类型为数值型，设置data的类型为数值类型
                if (isNum && !isPercent) {
                    HSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式
                    if (isInteger) {
                        contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
                    } else {
                        contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
                    }
                    // 设置单元格格式
                    contentCell.setCellStyle(contextstyle);
                    // 设置单元格内容为double类型
                    contentCell.setCellValue(Double.parseDouble(data.toString()));
                } else {
                    contentCell.setCellStyle(contextstyle);
                    // 设置单元格内容为字符型
                    if(null==data ){
                        contentCell.setCellValue(0);
                    }else{
                        contentCell.setCellValue(data.toString());
                    }


                }
            }
        }
        return wb;
    }
}
